/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

var fnMtoUsuarioModel = function(){
    function fnPrivInitValidForms(){
        validate = $( "#frm_mto_usuario" ).validate( {
            submitHandler: function( form ) {
                fnGrabarUsuario();
            },
            errorLabelContainer : ".msg_form",
            rules: {
                txt_username  : 
                {
                    required : true,
                    remote:{
                        url: asControllers[ CONTROLLER_MTO_USUARIOS ],
                        data: {
                            accion:ACC_EXISTS_USERNAME,
                            id : function() {
                                return $( "#hdd_id_usuario" ).val();
                            },
                            username : function() {
                                return $("#txt_username").val();
                            }
                        }
                    }
                },
                txt_password:{
                    required : function(){
                        var blFlag = $( "#hdd_id_usuario" ).val() == "-1";
                        return ( blFlag );
                    }
                },
                txt_nombres : 
                {
                    required : true
                },
                txt_ap_paterno : 
                {
                    required : true
                },
                txt_ap_materno : 
                {
                    required : true
                },
                txt_dni : 
                {
                    required : true
                }
            },
            messages: {
                txt_username  : 
                {
                    required : "",
                    remote:$.format("This username '{0}' is being used.")
                },
                txt_password  : 
                {
                    required : ""
                },
                txt_nombres : 
                {
                    required : ""
                },
                txt_ap_paterno : 
                {
                    required : ""
                },
                txt_ap_materno : 
                {
                    required : ""
                },
                txt_dni : 
                {
                    required : ""
                }
            }
        });
    }
    function fnPrivInitPopUps(){
        jFrmUsuario = $( "#div_mto_usuario" ).dialog({
            modal: true,
            autoOpen:false,
            width:"auto",
            title:'Mantenimiento de usuario',
            open:function(){
                $( "#hdd_id_usuario" ).val( "-1" );
                $( "#txt_fecha_nac" ).datepicker( {
                    setDate : new Date(),
                    showOn: "button",
                    dateFormat:"yy-mm-dd",
                    changeMonth: true,
                    changeYear: true,
                    yearRange: '1950:2020',
                    buttonImage: "../resources/images/calendar.gif",
                    buttonImageOnly: true
                } );
                $( ".msg_form label.error" ).remove();
                $( "#frm_mto_usuario .error" ).removeClass( "error" );
            }
        });
    }
    function fnPrivInitEvents(){
        $( "#btnAgregarUsuario" ).click( function(){
            fnPrivAgregarUsuario();
        //            jFrmUsuario.dialog( "open" );
        } );
    
    }
    function fnPrivLoadSelects(){
    //        var oParams = {
    //            accion:GET_SELECT_DATA
    //        }
    //        var oTipoUsuarios = fnCommon.fnSendServer(oParams, iController, JSON_FORMAT);
    //        var oTipoUsuarios = fnCommon.fillSelects(  );
    }
    function fnPrivLoadDataTable(){
        var oDataTable = new Array();
        var oParams ={
            accion : ACC_GET_DT_USERS
        }
        var oDataJSON = fnCommon.fnSendServer( oParams, CONTROLLER_DATA_TABLES, JSON_FORMAT );
        if( oDataJSON != null ){
            for( var i = 0; i< oDataJSON.length; i++ ){
                oDataTable[i] = fnCrearFilaUsuario( oDataJSON[i] );
            }
            
            oData = $('#tb_lista_usuarios').dataTable( {
                "sPaginationType": "full_numbers",
                "aaData": oDataTable,
                "aoColumns":[ 
                {
                    "sTitle": "USERNAME",
                    "sWidth": "15%" 
                }, 

                {
                    "sTitle": "NOM. COMPLETO",
                    "sWidth": "45%"
                }, 

                {
                    "sTitle": "TIPO USUARIO",
                    "sWidth": "15%"
                }, 

                {
                    "sTitle": "DNI",
                    "sWidth": "10%"
                }, 

                {
                    "sTitle": "SEXO",
                    "sWidth": "5%"
                }, 

                {
                    "sTitle": "OPCIONES",
                    "sWidth": "5%",
                    "sClass":"btnsOpciones"
                }, 

                {
                    "sTitle": "HAB.",
                    "sWidth": "5%",
                    "sClass":"btnsOpciones"
                }
                ]
            });
        }
    }
    function fnPrivAgregarUsuario() {
        $( "#sel_habilitado" ).val( "1" );
        $( "#txt_username" ).val( "" );
        $( "#txt_password" ).val( "" );
        $( "#sel_tipo_usuario" ).val( 0 );
        $( "#txt_nombres" ).val( "" );
        $( "#txt_ap_paterno" ).val( "" );
        $( "#txt_ap_materno" ).val( "" );
        $( "#sel_genero" ).val( 0 );
        $( "#txt_email" ).val( "" );
        $( "#txt_dni" ).val( "" );
        $( "#txt_fecha_nac" ).val( "" );
        $( "#txt_tlf_fijo" ).val( "" );
        $( "#txt_tlf_celular" ).val( "" );
        jFrmUsuario.dialog( "open" );
        fnPrivInitValidForms();
    }
    function fnEditarUsuario( iIdUsuario, btn_edit ) {
        indexTR = btn_edit.parentNode.parentNode;
        var usuario = fnTraerUsuarioPorId(iIdUsuario);
        if( usuario != null ) {
            $( "#sel_habilitado" ).val( usuario.iHabilitado );
            $( "#txt_username" ).val( usuario.sUsername );
            $( "#txt_password" ).val( "" );
            $( "#sel_tipo_usuario" ).val( usuario.iTipoUsuario );
            $( "#txt_nombres" ).val( usuario.sNombre );
            $( "#txt_ap_paterno" ).val( usuario.sApPaterno );
            $( "#txt_ap_materno" ).val( usuario.sApMaterno );
            $( "#sel_genero" ).val( usuario.sSexo );
            $( "#txt_email" ).val( usuario.sEmail );
            $( "#txt_dni" ).val( usuario.sDni );
            $( "#txt_fecha_nac" ).val( usuario.sFechaNac );
            $( "#txt_tlf_fijo" ).val( usuario.sTlfFijo );
            $( "#txt_tlf_celular" ).val( usuario.sTlfCelular );
            jFrmUsuario.dialog( "open" );
            $( "#hdd_id_usuario" ).val( usuario.iIdUsuario );
            fnPrivInitValidForms();
        } else {
            fnCommon.fnShowInfoAlert( "Error, id de usuario no se encuentra en la BD" , IMG_ALERT_ERROR );
        }
        
    }
    function fnGrabarUsuario(){
        var iIdUsuario = parseInt( $( "#hdd_id_usuario" ).val() );
        var iAccion = ( iIdUsuario == -1 ) ? ACC_AGREGAR_USUARIO : ACC_EDITAR_USUARIO;
        var oParams ={
            accion : iAccion,
            iIdUsuario : iIdUsuario,
            sUsername : $( "#txt_username" ).val(),
            sPassword : $( "#txt_password" ).val(),
            iTipoUsuario : $( "#sel_tipo_usuario" ).val(),
            sNombre : $( "#txt_nombres" ).val(),
            sApPaterno : $( "#txt_ap_paterno" ).val(),
            sApMaterno : $( "#txt_ap_materno" ).val(),
            sSexo : $( "#sel_genero" ).val(),
            sEmail : $( "#txt_email" ).val(),
            sDni : $( "#txt_dni" ).val(),
            dtFechaNac : $( "#txt_fecha_nac" ).val(),
            sTlfFijo : $( "#txt_tlf_fijo" ).val(),
            sTlfCelular : $( "#txt_tlf_celular" ).val(),
            iHabilitado : $( "#sel_habilitado" ).val()
        }
        var oUserJSON = fnCommon.fnSendServer( oParams, CONTROLLER_MTO_USUARIOS, JSON_FORMAT );
        if ( oUserJSON != null ) {
            fnCommon.fnShowInfoAlert( "Se guardó correctamente." , IMG_ALERT_SUCCESS );
            if( oData != null ) {
                if ( iAccion == ACC_EDITAR_USUARIO ) {
                    if ( indexTR != null ) {
                        oData.fnUpdate( fnCrearFilaUsuario( oUserJSON ) , indexTR, 0, false );
                    }
                } else {
                    oData.fnAddData( fnCrearFilaUsuario( oUserJSON ) );
                }
            }
        }else{
            fnCommon.fnShowInfoAlert( "Error al guardar." , IMG_ALERT_ERROR );
        }
        jFrmUsuario.dialog( "close" );
    }
    function fnConfirmarEliminarUsuario( iIdUsuario, btn_delete ) {
        indexTR = btn_delete.parentNode.parentNode;
        $( "#hdd_id_bean_confirm" ).val( iIdUsuario );
        $( "#hdd_bean_confirm" ).val( BEANUSUARIO );
        fnCommon.fnShowConfirmAlert( "¿Seguro que desea eliminar al usuario seleccionado?", IMG_ALERT_WARNING );
    }
    function fnEliminarUsuario() {
        var usuario;
        var iIdUsuario = $( "#hdd_id_bean_confirm" ).val() != "" ? parseInt( $( "#hdd_id_bean_confirm" ).val() ) : -1;
        if( iIdUsuario != -1 ){
            usuario = fnTraerUsuarioPorId( iIdUsuario );
            if( usuario != null ){
                var oParams = {
                    accion : ACC_ELIMINAR_USUARIO_POR_ID,
                    iId : iIdUsuario
                }
                var oDataJSON = fnCommon.fnSendServer( oParams, CONTROLLER_MTO_USUARIOS, JSON_FORMAT );
                if( oDataJSON != null ) {
                    fnCommon.fnShowInfoAlert( "El usuario fue eliminado correctamente." , IMG_ALERT_SUCCESS );
                    if( indexTR != null ){
                        oData.fnDeleteRow( indexTR );
                    }
                } else {
                    fnCommon.fnShowInfoAlert( "Error, usuario no existe o ya fue eliminado" , IMG_ALERT_ERROR );
                }
                
            } else {
                fnCommon.fnShowInfoAlert( "Error, usuario no existe o ya fue eliminado" , IMG_ALERT_ERROR );
            }
        }
    }
    function fnCrearFilaUsuario( usuario ){
        var asFila     = new Array();
        var iIndex    = 0;
    
        asFila [ iIndex++ ] = usuario.sUsername;
        asFila [ iIndex++ ] = usuario.sApPaterno + " " + usuario.sApMaterno + ", " + usuario.sNombre;
        asFila [ iIndex++ ] = usuario.sTipoUsuario;
        asFila [ iIndex++ ] = usuario.sDni;
        asFila [ iIndex++ ] = usuario.sSexo;
        asFila [ iIndex++ ] = fnCrearBotonesOpc( usuario.iIdUsuario );
        asFila [ iIndex++ ] = fnCrearBtnHabilitado( usuario.iIdUsuario, usuario.iHabilitado );
        return asFila;
    }
    function fnConfirmHabilitarUsuario( iIdUsuario, iEstado, btn_edit ) {
        indexTR = btn_edit.parentNode.parentNode;
        $( "#hdd_id_bean_confirm" ).val( iIdUsuario );
        $( "#hdd_bean_confirm" ).val( BEANUSUARIOENBDISAB );
        var sEstado = iEstado == 1 ? "deshabilitar":"habilitar";
        fnCommon.fnShowConfirmAlert( "¿Seguro que desea " + sEstado + " al usuario seleccionado?", IMG_ALERT_WARNING );
    }
    function fnHabilitarDesabilitarUsuario() {
        var oRsp;
        var oParams;
        var iIdUsuario = $( "#hdd_id_bean_confirm" ).val();
        var usuario = fnTraerUsuarioPorId( iIdUsuario );
        if ( usuario != null ) {
            oParams =
            {
                accion : ACC_DISABLE_USER_BY_ID,
                iId : iIdUsuario
            }
            oRsp = fnCommon.fnSendServer( oParams, CONTROLLER_MTO_USUARIOS, JSON_FORMAT );
            if( oRsp != null ){
                if( oRsp.code != "undefined" && indexTR != null ){
                    oData.fnUpdate( fnCrearFilaUsuario( oRsp ) , indexTR, 0, false );
                } else {
                    fnCommon.fnShowInfoAlert( "error" , IMG_ALERT_ERROR );
                }
            }
            
        }
    }
    function fnCrearBotonesOpc( iIdUsuario ){
        var userLoged = fnCommon.fnGetUserLoged();
        var sBtnEditar = "";
        var sBtnEliminar = "";
        if ( userLoged != null ) {
            sBtnEditar = "<img src='../resources/images/edit_user_32.png' title='Editar' onclick='fnMtoUsuarioModel.fnEditarUsuario(" + iIdUsuario + ", this)' />";
            sBtnEliminar = "<img src='../resources/images/delete_user_32.png' title='Eliminar' onclick='fnMtoUsuarioModel.fnConfirmarEliminarUsuario(" + iIdUsuario + ", this)' />";
            if( iIdUsuario <= 3 )
                sBtnEliminar = "";
            if ( userLoged.iIdUsuario != 1 && iIdUsuario == 1 ){
                sBtnEditar = "";
            }
        }
        return sBtnEditar + sBtnEliminar; 
    }
    function fnCrearBtnHabilitado( iIdUsuario, iHabilitado ){
        var sEnabDisab = parseInt( iHabilitado ) == 1 ? "enabled" : "disabled";
        var sHab = parseInt( iHabilitado ) == 1 ? "Deshabilitar" : "Habilitar";
        var sBtnHabilit = "<img title='" + sHab + "' src='../resources/images/user_" + sEnabDisab + ".png' "
        + " onclick='fnMtoUsuarioModel.fnConfirmHabilitarUsuario(" + iIdUsuario + "," + iHabilitado + ", this)' />";
        return sBtnHabilit;
    }
    function fnLoadInitData(){
        fnPrivInitEvents();
        fnPrivInitPopUps();
        fnPrivInitValidForms();
        fnPrivLoadSelects();
        fnPrivLoadDataTable();
    }
    function fnTraerUsuarioPorId( iIdUsuario ){
        var oParams =
        {
            accion : ACC_GET_USER_BY_ID,
            iId : iIdUsuario
        }
        var oUsuario = fnCommon.fnSendServer( oParams, CONTROLLER_MTO_USUARIOS, JSON_FORMAT );
        return oUsuario;
    }
    return {
        fnConfirmarEliminarUsuario    : fnConfirmarEliminarUsuario,
        fnConfirmHabilitarUsuario     : fnConfirmHabilitarUsuario,
        fnEditarUsuario               : fnEditarUsuario,
        fnEliminarUsuario             : fnEliminarUsuario,
        fnHabilitarDesabilitarUsuario : fnHabilitarDesabilitarUsuario,
        fnLoadInitData                : fnLoadInitData,
        fnTraerUsuarioPorId           : fnTraerUsuarioPorId
    }
}();

